// AI接口功能测试脚本
const axios = require('axios');

const BASE_URL = 'http://localhost:3001/api/ai';

async function testAIHealth() {
  try {
    console.log('🧪 测试AI服务健康状态...');
    const response = await axios.get(`${BASE_URL}/health`);
    console.log('✅ 健康状态测试通过:', response.data);
    return true;
  } catch (error) {
    console.error('❌ 健康状态测试失败:', error.message);
    return false;
  }
}

async function testAIServices() {
  try {
    console.log('\n🧪 测试获取AI服务信息...');
    const response = await axios.get(`${BASE_URL}/services`);
    console.log('✅ 服务信息测试通过:');
    console.log('   默认服务:', response.data.data.defaultProvider);
    console.log('   可用服务数量:', response.data.data.services.length);
    return true;
  } catch (error) {
    console.error('❌ 服务信息测试失败:', error.message);
    return false;
  }
}

async function testAIChat() {
  try {
    console.log('\n🧪 测试AI聊天功能...');
    const response = await axios.post(`${BASE_URL}/chat`, {
      messages: [
        { role: 'user', content: '你好，请介绍一下你自己' }
      ],
      options: {
        maxTokens: 100,
        temperature: 0.7
      }
    });
    console.log('✅ 聊天功能测试通过:');
    console.log('   响应内容:', response.data.data.content.substring(0, 100) + '...');
    return true;
  } catch (error) {
    console.error('❌ 聊天功能测试失败:', error.message);
    if (error.response) {
      console.error('   错误详情:', error.response.data);
    }
    return false;
  }
}

async function testAIGenerateText() {
  try {
    console.log('\n🧪 测试文本生成功能...');
    const response = await axios.post(`${BASE_URL}/generate`, {
      prompt: '请用一句话描述二手交易平台的重要性',
      options: {
        maxTokens: 50,
        temperature: 0.8
      }
    });
    console.log('✅ 文本生成测试通过:');
    console.log('   生成文本:', response.data.data.text);
    return true;
  } catch (error) {
    console.error('❌ 文本生成测试失败:', error.message);
    if (error.response) {
      console.error('   错误详情:', error.response.data);
    }
    return false;
  }
}

async function testGoodsDescription() {
  try {
    console.log('\n🧪 测试商品描述生成功能...');
    const response = await axios.post(`${BASE_URL}/generate/goods-description`, {
      title: 'iPhone 13 Pro Max 256GB',
      category: '手机数码',
      condition: '95新，轻微使用痕迹',
      price: 4500
    });
    console.log('✅ 商品描述生成测试通过:');
    console.log('   生成描述:', response.data.data.description);
    return true;
  } catch (error) {
    console.error('❌ 商品描述生成测试失败:', error.message);
    if (error.response) {
      console.error('   错误详情:', error.response.data);
    }
    return false;
  }
}

async function testPriceSuggestion() {
  try {
    console.log('\n🧪 测试价格建议功能...');
    const response = await axios.post(`${BASE_URL}/suggest/price`, {
      title: 'MacBook Pro 2021 14寸 M1 Pro',
      category: '电脑办公',
      condition: '9成新，功能完好',
      originalPrice: 14999
    });
    console.log('✅ 价格建议测试通过:');
    console.log('   建议内容:', response.data.data.suggestion);
    return true;
  } catch (error) {
    console.error('❌ 价格建议测试失败:', error.message);
    if (error.response) {
      console.error('   错误详情:', error.response.data);
    }
    return false;
  }
}

async function runAllTests() {
  console.log('🚀 开始AI接口功能测试...\n');
  
  const tests = [
    testAIHealth,
    testAIServices,
    testAIChat,
    testAIGenerateText,
    testGoodsDescription,
    testPriceSuggestion
  ];
  
  let passed = 0;
  let failed = 0;
  
  for (const test of tests) {
    const result = await test();
    if (result) {
      passed++;
    } else {
      failed++;
    }
  }
  
  console.log('\n📊 测试结果汇总:');
  console.log(`✅ 通过: ${passed} 个测试`);
  console.log(`❌ 失败: ${failed} 个测试`);
  console.log(`📈 成功率: ${((passed / tests.length) * 100).toFixed(1)}%`);
  
  if (failed === 0) {
    console.log('🎉 所有测试通过！AI接口功能正常。');
  } else {
    console.log('⚠️  部分测试失败，请检查AI服务配置。');
  }
}

// 如果直接运行此文件，则执行测试
if (require.main === module) {
  runAllTests().catch(error => {
    console.error('测试执行出错:', error);
    process.exit(1);
  });
}

module.exports = {
  testAIHealth,
  testAIServices,
  testAIChat,
  testAIGenerateText,
  testGoodsDescription,
  testPriceSuggestion,
  runAllTests
};